package com.atguigu.jxc.controller;

import com.alibaba.fastjson.JSON;
import com.atguigu.jxc.domain.ServiceVO;
import com.atguigu.jxc.entity.Goods;
import com.atguigu.jxc.service.GoodsService;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * @description 商品信息Controller
 */
@RequestMapping("/goods")
@RestController
public class GoodsController {

    @Autowired
    private GoodsService goodsService;

    /*请求URL：http://localhost:8080/goods/listInventory
    请求参数：Integer page, Integer rows, String codeOrName, Integer goodsTypeId
    请求方式：POST
    返回值类型： JSON
    返回值：Map<String,Object>
    Response Example Value：*/
    @PostMapping ("/listInventory")
    public Map<String, Object> listInventory(Integer page, Integer rows, String codeOrName, Integer goodsTypeId){
        Map<String,Object> save =  goodsService.listInventory(page,rows,codeOrName,goodsTypeId);
        return save;
    }
    /**
     * 分页查询商品库存信息
     * @param page 当前页
     * @param rows 每页显示条数
     * @param codeOrName 商品编码或名称
     * @param goodsTypeId 商品类别ID
     * @return
     */


    /**
     * 分页查询商品信息
     * @param page 当前页
     * @param rows 每页显示条数
     * @param goodsName 商品名称
     * @param goodsTypeId 商品类别ID
     * @return
     * 请求URL：http://localhost:8080/goods/list
     * 请求参数：Integer page, Integer rows, String goodsName, Integer goodsTypeId
     * 请求方式：POST
     * 返回值类型：JSON
     * 返回值：Map<String,Object>
     */
    @PostMapping ("/list")
    public Map<String, Object> listSelectAllGoods(Integer page, Integer rows, String goodsName, Integer goodsTypeId){
         return goodsService.listSelectAllGoods(page,rows,goodsName,goodsTypeId);

    }


    /**
     * 生成商品编码
     * @return
     */


    /**
     * 添加或修改商品信息
     * @param goods 商品信息实体
     * @return
     * 请求URL：http://localhost:8080/goods/save?goodsId=37
     * 请求参数：Goods goods
     * 请求方式：POST
     * 返回值类型：JSON
     * 返回值：ServiceVO
     */
    @PostMapping ("/save")
    public ServiceVO saveOrUpdateGoods(Goods goods){
         goodsService.saveOrUpdateGoods(goods);
         return new  ServiceVO(1000,"成功");

    }

    /**
     * 删除商品信息
     * @param goodsId 商品ID
     * @return
    请求URL：http://localhost:8080/goods/delete
    请求参数：Integer goodsId
    请求方式：POST
    返回值类型：JSON
    返回值：ServiceVO
    Response Example Value：
     */
    @PostMapping ("/delete")
    public ServiceVO deleteGoods(Integer goodsId){
        goodsService.deleteGoods(goodsId);
        return new  ServiceVO(2000,"成功");

    }



    /**
     * 分页查询无库存商品信息
     * @param page 当前页
     * @param rows 每页显示条数
     * @param nameOrCode 商品名称或商品编码
     * @return
     * 请求URL：http://localhost:8080/goods/getNoInventoryQuantity
     * 请求参数：Integer page,Integer rows,String nameOrCode
     * 请求方式：POST
     * 返回值类型：JSON
     * 返回值：Map<String,Object>
     * Response Example Value
     */
    @PostMapping("/getNoInventoryQuantity")
    public Map<String,Object> getNoInventoryQuantity(Integer page,Integer rows,String nameOrCode) {
        return goodsService.getNoInventoryQuantity(page,rows,nameOrCode);
    }

    /**
     * 分页查询有库存商品信息
     * @param page 当前页
     * @param rows 每页显示条数
     * @param nameOrCode 商品名称或商品编码
     * @return
     * 请求URL：http://localhost:8080/goods/getHasInventoryQuantity
     * 请求参数：Integer page,Integer rows,String nameOrCode
     * 请求方式：POST
     * 返回值类型：JSON
     * 返回值：Map<String,Object>
     * Response Example Value：
     */
        @PostMapping("/getHasInventoryQuantity")
        public Map<String,Object> getHasInventoryQuantity(Integer page,Integer rows,String nameOrCode) {
        return goodsService.getHasInventoryQuantity(page,rows,nameOrCode);
    }

    /**
     * 添加商品期初库存
     * @param goodsId 商品ID
     * @param inventoryQuantity 库存
     * @param purchasingPrice 成本价
     * @return
     */

    /**
     * 删除商品库存
     * @param goodsId 商品ID
     * @return
     */

    /**
     * 查询库存报警商品信息
     * @return
     */

   /* 请求URL：http://localhost:8080/goods/saveStock?goodsId=25
    请求参数：Integer goodsId,Integer inventoryQuantity,double purchasingPrice
    请求方式：POST
    返回值类型：JSON
    返回值：ServiceVO
    添加或者修改库存和成本价
    Response Example Value：*/

    @PostMapping("/saveStock")
    public ServiceVO saveStock(Integer goodsId,Integer inventoryQuantity,double purchasingPrice) {

        goodsService.saveStock(goodsId, inventoryQuantity, purchasingPrice);
        return new ServiceVO<>(100,"成功");
    }
}
